﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Joel.Vishnu.Presentacion;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Modelo.Enumeradores;
using Joel.Vishnu.Modelo.Entidades;

namespace Joel.Vishnu.Formularios
{
    public partial class Clientes : Form, IClientes
    {
        #region Constructores

        public Clientes()
        {
            InitializeComponent();
            grdClientes.AutoGenerateColumns = false;
            presentador = new ClientesPresentador(this);
            grdClientes.DataSource = bsClientes;
            clienteId = 0;
        }

        #endregion

        #region Atributos

        private ClientesPresentador presentador;
        private EnumEstado estado;
        private Int32 clienteId;

        #endregion

        #region Propiedades

        public Int32 ClienteId
        {
            get
            {
                return clienteId;
                //if (String.IsNullOrWhiteSpace(txtId.Text))
                //    return 0;
                //else
                //    return Convert.ToInt32(txtId.Text);
            }
        }

        public String Nombre
        {
            get { return txtNombre.Text; }
        }

        public String Apellido
        {
            get { return txtApellido.Text; }
        }

        public Int32 Dni
        {
            get
            {
                if (String.IsNullOrWhiteSpace(txtDni.Text))
                    return 0;
                else
                    return Convert.ToInt32(txtDni.Text);
            }
        }

        public DateTime FechaCumpleanos
        {
            get { return dtpFechaCumpleanos.Value; }
        }

        public Int32 GeneroId
        {
            get
            {
                if (radMasculino.Checked)
                    return (Int32)EnumGenero.MASCULINO_ID;
                else
                    return (Int32)EnumGenero.FEMENINO_ID;
            }
        }

        public String Email
        {
            get { return txtEmail.Text; }
        }

        public String Telefono
        {
            get
            {
                if (String.IsNullOrWhiteSpace(txtTelefono.Text))
                    return "0";
                else
                    return txtTelefono.Text;
            }
        }

        public String Direccion
        {
            get { return txtDireccion.Text; }
        }

        public Int32 BarrioId
        {
            get { return (Int32)cboBarrio.SelectedValue; }
        }

        public List<Barrio> ListaBarrios
        {
            set
            {
                cboBarrio.ValueMember = "Id";
                cboBarrio.DisplayMember = "Nombre";
                cboBarrio.DataSource = value;
            }
        }

        public DateTime FechaPrimeraCompra
        {
            get { return dtpFechaPrimeraCompra.Value; }
        }

        public EnumEstado Estado
        {
            get { return estado; }
        }

        public List<Cliente> ListaClientes
        {
            set { bsClientes.DataSource = value; }
        }

        #endregion

        #region Metodos

        public void HabilitarControles()
        {
            btnAceptar.Enabled = !btnAceptar.Enabled;
            btnCancelar.Enabled = !btnCancelar.Enabled;
            btnInsertar.Enabled = !btnInsertar.Enabled;
            btnModificar.Enabled = !btnModificar.Enabled;
            btnEliminar.Enabled = !btnEliminar.Enabled;
            grdClientes.Enabled = !grdClientes.Enabled;
            //lblId.Enabled = !lblId.Enabled;
            lblNombre.Enabled = !lblNombre.Enabled;
            lblApellido.Enabled = !lblApellido.Enabled;
            lblDni.Enabled = !lblDni.Enabled;
            lblFechaCumpleanos.Enabled = !lblFechaCumpleanos.Enabled;
            lblGenero.Enabled = !lblGenero.Enabled;
            lblEmail.Enabled = !lblEmail.Enabled;
            lblTelefono.Enabled = !lblTelefono.Enabled;
            lblDireccion.Enabled = !lblDireccion.Enabled;
            lblBarrio.Enabled = !lblBarrio.Enabled;
            lblFechaPrimeraCompra.Enabled = !lblFechaPrimeraCompra.Enabled;
            txtNombre.Enabled = !txtNombre.Enabled;
            txtApellido.Enabled = !txtApellido.Enabled;
            txtDni.Enabled = !txtDni.Enabled;
            dtpFechaCumpleanos.Enabled = !dtpFechaCumpleanos.Enabled;
            radMasculino.Enabled = !radMasculino.Enabled;
            radFemenino.Enabled = !radFemenino.Enabled;
            txtEmail.Enabled = !txtEmail.Enabled;
            txtTelefono.Enabled = !txtTelefono.Enabled;
            txtDireccion.Enabled = !txtDireccion.Enabled;
            cboBarrio.Enabled = !cboBarrio.Enabled;
            dtpFechaPrimeraCompra.Enabled = !dtpFechaPrimeraCompra.Enabled;
        }

        public void ActualizarDatos()
        {
            if (bsClientes.Current != null)
            {
                try
                {
                    clienteId = ((Cliente)bsClientes.Current).Id;
                    txtNombre.Text = ((Cliente)bsClientes.Current).Nombre;
                    txtApellido.Text = ((Cliente)bsClientes.Current).Apellido;
                    txtDni.Text = Convert.ToString(((Cliente)bsClientes.Current).Dni);
                    dtpFechaCumpleanos.Text = Convert.ToString(((Cliente)bsClientes.Current).FechaCumpleanos);
                    if (((Cliente)bsClientes.Current).Genero.Id == 1)
                    {
                        radMasculino.Checked = true;
                        radFemenino.Checked = false;
                    }
                    else
                    {
                        radMasculino.Checked = false;
                        radFemenino.Checked = true;
                    }
                    txtEmail.Text = ((Cliente)bsClientes.Current).Email;
                    txtTelefono.Text = ((Cliente)bsClientes.Current).Telefono;
                    txtDireccion.Text = ((Cliente)bsClientes.Current).Direccion;
                    cboBarrio.SelectedValue = ((Cliente)bsClientes.Current).Barrio.Id;
                    dtpFechaPrimeraCompra.Text = Convert.ToString(((Cliente)bsClientes.Current).FechaPrimeraCompra);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
                LimpiarCampos();
        }

        public void LimpiarCampos()
        {
            try
            {
                txtNombre.Text = String.Empty;
                txtApellido.Text = String.Empty;
                txtDni.Text = String.Empty;
                dtpFechaCumpleanos.Text = String.Empty;
                radMasculino.Checked = true;
                radFemenino.Checked = false;
                txtEmail.Text = String.Empty;
                txtTelefono.Text = String.Empty;
                txtDireccion.Text = String.Empty;
                cboBarrio.Text = String.Empty;
                dtpFechaPrimeraCompra.Text = String.Empty;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion

        #region Eventos

        private void txtDni_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)
                e.SuppressKeyPress = true;
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                presentador.Aceptar();
                HabilitarControles();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                HabilitarControles();
                presentador.Inicializar();
                ActualizarDatos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnInsertar_Click(object sender, EventArgs e)
        {
            try
            {
                estado = EnumEstado.NUEVO;
                HabilitarControles();
                LimpiarCampos();
                txtNombre.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (bsClientes.Current != null)
            {
                try
                {
                    estado = EnumEstado.MODIFICAR;
                    HabilitarControles();
                    txtNombre.Focus();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (bsClientes.Current != null)
            {
                if (MessageBox.Show("¿Está seguro que desea eliminar el cliente seleccionado?", "Clientes", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    try
                    {
                        presentador.Eliminar();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        presentador.Inicializar();
                    }
                }
            }

        }

        private void Clientes_Load(object sender, EventArgs e)
        {
            try
            {
                presentador.Inicializar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void grdClientes_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                ActualizarDatos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion
    }
}
